home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows 95 API Bible
/
Windows 95 API Bible 3 Disc Set.iso
/
Win32 API Bible Book 3 of 3.iso
/
chapte19
/
devcaps.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-29
|
13KB
|
457 lines
#include <windows.h>
#include <stdio.h>
#include "DevCaps.h"
#include <vfw.h>
#if defined (WIN32)
#define IS_WIN32 TRUE
#else
#define IS_WIN32 FALSE
#endif
#define IS_NT IS_WIN32 && (BOOL)(GetVersion() < 0x80000000)
#define IS_WIN32S IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4))
#define IS_WIN95 (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32
HINSTANCE hInst; // current instance
LPCTSTR lpszAppName = "MyApp";
LPCTSTR lpszTitle = "My Application";
BOOL RegisterWin95( CONST WNDCLASS* lpwc );
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (hInstance, lpszAppName);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = lpszAppName;
wc.lpszClassName = lpszAppName;
if ( IS_WIN95 )
{
if ( !RegisterWin95( &wc ) )
return( FALSE );
}
else if ( !RegisterClass( &wc ) )
return( FALSE );
hInst = hInstance;
hWnd = CreateWindow( lpszAppName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL,
NULL,
hInstance,
NULL
);
if ( !hWnd )
return( FALSE );
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
while( GetMessage( &msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return( msg.wParam );
}
BOOL RegisterWin95( CONST WNDCLASS* lpwc )
{
WNDCLASSEX wcex;
wcex.style = lpwc->style;
wcex.lpfnWndProc = lpwc->lpfnWndProc;
wcex.cbClsExtra = lpwc->cbClsExtra;
wcex.cbWndExtra = lpwc->cbWndExtra;
wcex.hInstance = lpwc->hInstance;
wcex.hIcon = lpwc->hIcon;
wcex.hCursor = lpwc->hCursor;
wcex.hbrBackground = lpwc->hbrBackground;
wcex.lpszMenuName = lpwc->lpszMenuName;
wcex.lpszClassName = lpwc->lpszClassName;
// Added elements for Windows 95.
//...............................
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.hIconSm = LoadImage(wcex.hInstance, lpwc->lpszClassName,
IMAGE_ICON, 16, 16,
LR_DEFAULTCOLOR );
return RegisterClassEx( &wcex );
}
#define MSG_LEN 1024
char msg[MSG_LEN+1];
int nTabStop = 100;
HWND hListBox = NULL;
HWND hMCIWnd = NULL; // MCIWnd window handle
VOID GetMCIWndInfo();
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_CREATE :
// Create ListBox
//...............
hListBox = CreateWindow( "LISTBOX", "",
WS_CHILD | LBS_NOTIFY |
WS_VSCROLL | WS_BORDER |
WS_VISIBLE | LBS_NOINTEGRALHEIGHT |
LBS_USETABSTOPS,
0, 0,
0, 0,
hWnd,
(HMENU)101,
hInst,
NULL );
SendMessage(hListBox, LB_SETTABSTOPS, 1, (LPARAM)&nTabStop);
// create MCIWnd window
//.....................
hMCIWnd = MCIWndCreate(hWnd, hInst,
WS_VISIBLE | WS_CHILD |
WS_OVERLAPPEDWINDOW | WS_BORDER |
MCIWNDF_SHOWALL | MCIWNDF_NOTIFYMODE,
NULL
);
if (!hMCIWnd)
{
MessageBox(hWnd, "Error creating MCIWnd window...",
NULL, MB_OK);
DestroyWindow( hWnd );
}
break;
case WM_SIZE :
MoveWindow( hListBox, 0, 0,
LOWORD( lParam ),
HIWORD( lParam ), TRUE );
break;
case WM_COMMAND :
switch( LOWORD( wParam ) )
{
case IDM_AVIFILE :
{
MCIWndOpen(hMCIWnd, "sample.avi", NULL);
GetMCIWndInfo();
MCIWndClose(hMCIWnd);
}
break;
case IDM_CDAUDIO :
{
MCIWndOpen(hMCIWnd, "cdaudio", NULL);
GetMCIWndInfo();
MCIWndClose(hMCIWnd);
}
break;
case IDM_MIDIAUDIO :
{
MCIWndOpen(hMCIWnd, "sample.mid", NULL);
GetMCIWndInfo();
MCIWndClose(hMCIWnd);
}
break;
case IDM_WAVEFORM :
{
MCIWndOpen(hMCIWnd, "sample.wav", NULL);
GetMCIWndInfo();
MCIWndClose(hMCIWnd);
}
break;
case IDM_ABOUT :
DialogBox( hInst, "AboutBox", hWnd, (DLGPROC)About );
break;
case IDM_EXIT :
DestroyWindow( hWnd );
break;
}
break;
case WM_DESTROY :
// destroy MCIWnd, if one exists
//..............................
if (hMCIWnd)
MCIWndDestroy(hMCIWnd);
PostQuitMessage(0);
break;
default :
return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
}
return( 0L );
}
#define Display(s) SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)s)
VOID GetMCIWndInfo(HWND hWnd)
{
RECT rect;
char cTmp[MSG_LEN];
SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
// MCIWndGetDevice
MCIWndGetDevice(hMCIWnd, cTmp, MSG_LEN);
sprintf(msg, "MCIWndGetDevice:\t %s", cTmp);
Display(msg);
Display("");
// MCIWndCanConfig
sprintf(msg, "MCIWndCanConfig:\t %s",
(MCIWndCanConfig(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndCanEject
sprintf(msg, "MCIWndCanEject:\t %s",
(MCIWndCanEject(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndCanPlay
sprintf(msg, "MCIWndCanPlay:\t %s",
(MCIWndCanPlay(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndCanRecord
sprintf(msg, "MCIWndCanRecord:\t %s",
(MCIWndCanRecord(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndCanSave
sprintf(msg, "MCIWndCanSave:\t %s",
(MCIWndCanSave(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndCanWindow
sprintf(msg, "MCIWndCanWindow:\t %s",
(MCIWndCanWindow(hMCIWnd) ? "Yes" : "No") );
Display(msg);
// MCIWndGetActiveTimer
//
// NOTE: As of this writing, an error exists in the VFW.H
// file distributed with the WIN32SDK. The macro
// definition is incorrectly terminated by a semi-colon.
// The semi-colon must be removed if this macro is to be
// used in an expression, or the compiler will generate errors.
sprintf(msg, "MCIWndGetActiveTimer:\t %ld",
MCIWndGetActiveTimer(hMCIWnd));
Display(msg);
// MCIWndGetAlias
sprintf(msg, "MCIWndGetAlias:\t %ld",
MCIWndGetAlias(hMCIWnd));
Display(msg);
// MCIWndGetDest
MCIWndGetDest(hMCIWnd, &rect);
sprintf(msg, "MCIWndGetDest:\t left:%d, top:%d, right:%d, bottom:%d",
rect.left, rect.top, rect.right, rect.bottom);
Display(msg);
// MCIWndGetDeviceID
sprintf(msg, "MCIWndGetDeviceID:\t %ld",
MCIWndGetDeviceID(hMCIWnd));
Display(msg);
// MCIWndGetEnd
sprintf(msg, "MCIWndGetEnd:\t %ld",
MCIWndGetEnd(hMCIWnd));
Display(msg);
// MCIWndGetError
sprintf(msg, "MCIWndGetError:\t %ld",
MCIWndGetError(hMCIWnd, cTmp, MSG_LEN), cTmp);
Display(msg);
// MCIWndGetFileName
MCIWndGetFileName(hMCIWnd, cTmp, MSG_LEN);
sprintf(msg, "MCIWndGetFileName:\t %s", cTmp);
Display(msg);
// MCIWndGetInactiveTimer
//
// NOTE: As of this writing, an error exists in the VFW.H
// file distributed with the WIN32SDK. The macro
// definition is incorrectly terminated by a semi-colon.
// The semi-colon must be removed if this macro is to be
// used in an expression, or the compiler will generate errors.
sprintf(msg, "MCIWndGetInactiveTimer:\t %ld",
MCIWndGetInactiveTimer(hMCIWnd));
Display(msg);
// MCIWndGetLength
sprintf(msg, "MCIWndGetLength:\t %ld",
MCIWndGetLength(hMCIWnd));
Display(msg);
// MCIWndGetMode
sprintf(msg, "MCIWndGetMode:\t %ld - %s",
MCIWndGetMode(hMCIWnd, cTmp, MSG_LEN), cTmp);
Display(msg);
// MCIWndGetPalette
sprintf(msg, "MCIWndGetPalette:\t %ld",
MCIWndGetPalette(hMCIWnd));
Display(msg);
// MCIWndGetPosition
sprintf(msg, "MCIWndGetPosition:\t %ld",
MCIWndGetPosition(hMCIWnd));
Display(msg);
// MCIWndGetPositionString
sprintf(msg, "MCIWndGetPositionString:\t %ld - %s",
MCIWndGetPositionString(hMCIWnd, cTmp, MSG_LEN), cTmp);
Display(msg);
// MCIWndGetRepeat
sprintf(msg, "MCIWndGetRepeat:\t %s",
(MCIWndGetRepeat(hMCIWnd) ? "Repeat mode ON" :
"Repeat mode OFF") );
Display(msg);
// MCIWndGetSource
MCIWndGetSource(hMCIWnd, &rect);
sprintf(msg, "MCIWndGetSource:\t left:%d, top:%d, right:%d, bottom:%d",
rect.left, rect.top, rect.right, rect.bottom);
Display(msg);
// MCIWndGetSpeed
sprintf(msg, "MCIWndGetSpeed:\t %ld",
MCIWndGetSpeed(hMCIWnd));
Display(msg);
// MCIWndGetStart
sprintf(msg, "MCIWndGetStart:\t %ld",
MCIWndGetStart(hMCIWnd));
Display(msg);
// MCIWndGetStyles
sprintf(msg, "MCIWndGetStyles:\t %ld",
MCIWndGetStyles(hMCIWnd));
Display(msg);
// MCIWndGetTimeFormat
sprintf(msg, "MCIWndGetTimeFormat:\t %ld",
MCIWndGetTimeFormat(hMCIWnd, cTmp, MSG_LEN), cTmp);
Display(msg);
// MCIWndGetVolume
sprintf(msg, "MCIWndGetVolume:\t %ld",
MCIWndGetVolume(hMCIWnd));
Display(msg);
// MCIWndGetZoom
sprintf(msg, "MCIWndGetZoom:\t %ld%c",
MCIWndGetZoom(hMCIWnd), '%');
Display(msg);
}
LRESULT CALLBACK About( HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
if ( LOWORD(wParam) == IDOK
|| LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}